// Cz OS Kernel - Freestanding 模式
// 不依赖标准库，可用于操作系统开发

const builtin = @import("builtin");

/// 内核入口点
export fn _start() callconv(.C) noreturn {
    // 初始化硬件
    hardware_init();
    
    // 初始化内存管理
    memory_init();
    
    // 初始化 Actor 调度器
    scheduler_init();
    
    // 启动内核主循环
    kernel_main();
}

/// 硬件初始化
fn hardware_init() void {
    // TODO: 初始化 GDT/IDT (x86)
    // TODO: 初始化中断控制器
    // TODO: 初始化定时器
}

/// 内存管理初始化
fn memory_init() void {
    // TODO: 设置页表
    // TODO: 初始化物理内存分配器
    // TODO: 初始化堆分配器
}

/// Actor 调度器初始化
fn scheduler_init() void {
    // TODO: 初始化任务队列
    // TODO: 设置定时器中断
}

/// 内核主循环
fn kernel_main() noreturn {
    // 简单的调度循环
    while (true) {
        // 调度下一个 Actor
        schedule_next_actor();
        
        // 处理中断
        handle_interrupts();
        
        // 空闲时休眠
        halt();
    }
}

fn schedule_next_actor() void {
    // TODO: 实现 Actor 调度
}

fn handle_interrupts() void {
    // TODO: 处理中断队列
}

fn halt() void {
    // 等待中断
    asm volatile ("hlt");
}

/// Panic 处理（操作系统必需）
pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace, ret_addr: ?usize) noreturn {
    _ = msg;
    _ = error_return_trace;
    _ = ret_addr;
    
    // 显示错误信息到串口或屏幕
    // TODO: 实现错误输出
    
    while (true) {
        halt();
    }
}
